[따배도] - 컨테이너 사용하기


  • 도커의 기본적인 실행/관리 명령어를 알아봅시다.

컨테이너 이미지 관리

  • docker inspect [옵션] <이미지이름:태그> - 다운 받은 이미지 상세보기

    • ex) docker inspect nginx:1.14

컨테이너 이미지 실행, 삭제

  • docker create [옵션] <이미지이름:태그> - 컨테이너를 생성 후 기본 백그라운드 실행
  • docker start [옵션] <컨테이너 이름> - 생성된 컨테이너를 실행
  • 위의 두개 명령어를 합친 명령어가 run 명령어입니다.
  • docker stop [옵션] <컨테이너 이름> - 실행중인 컨테이너를 중지
  • docker rm [옵션] <컨테이너 이름> - 중지중인 컨테이너를 삭제

실행중인 컨테이너 관리(살펴보기)

  • docker attach [옵션] <컨테이너 이름> - 포그라운드로 실행중인 컨테이너 연결
  • docker top [옵션] <컨테이너 이름> - 컨테이너에서 동작중인 프로세스 확인
  • docker logs [옵션] <컨테이너 이름> - 실행중인 컨테이너가 생성한 로그 보기
  • docker exec [옵션] <컨테이너 이름> - 실행중인 컨테이너 안에서 새로운 명령어 추가 실행

실습

  • 실습을 위한 nginx:1.14, mysql:latest 버전 다운로드
$ docker pull nginx:1.14
$ docker pull mysql
  • create 명령어 사용

    • 해당 명령어는 기본적으로 백그라운드로 실행합니다.

1  크리에이티드 명령어

  • start 명령어를 사용해 nginx 실행
$ docker start webserver
  • inspect 명령어를 통해 상세정보 확인(네트워크 IP 등)

    • 간략한(필요한) 정보를 위해 '{{.메서드명.}}' 형식으로 적게되면 해당 내용만 출력 가능(아래는 네트워크 IP 주소를 출력함)
$ docker inspect webserver
$ docker inspect --format '{{.NetworkSettings.IPAddress}}' webserver
  • 자주 사용하는 명령어는 alias 명령어를 통해 등록하기

    • alias <사용할 명령어>="<기존 명령어>"
    • 등록된 명령어를 확인하고 싶으면 alias 입력
$ alias cip="docker inspect --format '{{.NetworkSettings.IPAddress}}'"
$ cip webserver(도커 컨테이너 이름)
  • curl 명령어를 통해 웹서버 동작중인 것을 확인
$ curl 172.17.0.2
  • logs 명령어를 통해 컨테이너 로그 확인
$ docker logs webserver
$ docker logs -f webserver # -f 옵션은 follow 옵션으로 로그를 계속 감시함
# 커맨드 창을 하나 더 열어서 테스트 해야함
  • top 명령어를 통해 해당 컨테이너 안에서 실행중인 컨테이너 목록을 출력
$ docker top webserver
  • exec 명령어를 통해 컨테이너에 직접 접속하여 bash shell 사용(nginx 정보 수정)

    • -i : interactive
    • -t : terminal
$ docker exec -it webserver bash
$ cd /usr/share/nginx/html # nginx 디렉토리
$ echo "nickhealthy" > index.html # index.html 파일 수정
$ exit # 컨테이너 밖으로

2  엔진엑스 수정

컨테이너 종료

  • 컨테이너 중지 && 다시 시작 && 강제 종료
$ docker stop webserver # 컨테이너 중지
$ docker start webserver # 컨테이너 시작
$ docker rm webserver # 컨테이너 삭제(컨테이너 중지 후 가능)
$ docker rm -f $(docker ps -aq) # 종료 및 실행중인 모든 컨테이너를 강제 종료

문제 풀이

요구사항

  1. 아파치 웹서버 컨테이너 이미지를 검색한 후 다운로드 하세요.(search, create)
  2. 다운로드 한 아파치 웹서버를 백그라운드 실행(detach), 컨테이너 이름: web으로 동작 시키세요(run)
  3. 동작중인 컨테이너 목록을 확인해서 web 컨테이너가 running 중인지 확인하세요
  4. 실행중인 web 컨테이너의 IP Address를 확인하세요(inspect)
  5. curl 명령으로 접속 시도해 보세요. 어떤 웹페이지가 표시되나요?
  6. web 컨테이너가 만들어내는 로그를 출력하세요.
  7. 실행중인 모든 컨테이너를 중지하고 삭제하세요.
  8. 다운로드 된 컨테이너 이미지를 삭제하세요.

풀이

  • 아파치 웹서버 컨테이너 이미지를 검색한 후 다운로드 하세요.(search, create)
$ docker search httpd # 아파치 웹서버 httpd 이미지 확인
$ docker create httpd # 컨테이너 이미지 생성 후 백그라운드 실행
$ docker images # 다운받은 이미지 확인
  • 다운로드 한 아파치 웹서버를 백그라운드 실행(detach), 컨테이너 이름: web으로 동작 시키세요(run)
$ docker run -d --name web httpd # 백그라운드 실행
  • 동작중인 컨테이너 목록을 확인해서 web 컨테이너가 running 중인지 확인하세요
$ docker ps # 실행중인 컨테이너 확인
  • 실행중인 web 컨테이너의 IP Address를 확인하세요(inspect)
$ docker inspect web # IP address는 172.17.0.2로 확인
$ alias cip="docker inspect --format '{{NetworkSettings.IPAddress}}'" # 좀더 쉬운 실행을 위해 alias 등록
$ cip web # alias 확인
  • curl 명령으로 접속 시도해 보세요. 어떤 웹페이지가 표시되나요?
$ curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
  • web 컨테이너가 만들어내는 로그를 출력하세요.

    • 사전에 커맨드 창을 하나 더 생성
$ docker logs -f web # A 커맨드 창
$ curl 172.17.0.2 # B 커맨드 창
# A 커맨드 창에서 정상 출력
172.17.0.1 - - [20/Jul/2021:14:34:21 +0000] "GET / HTTP/1.1" 200 45
  • 실행중인 모든 컨테이너를 중지하고 삭제하세요.
# 컨테이너 중지 및 삭제 동시에 진행
$ docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
  • 다운로드 된 컨테이너 이미지를 삭제하세요.
$ docker rmi httpd # 아파치 웹서버 이미지 삭제
$ docker images # 이미지 확인

Reference

https://www.youtube.com/watch?v=wrx-ixvtzxk&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=16


Hello, I'm@nickhealthy
개발자를 꿈꾸고, 파이썬과 클라우드에 관심이 많은 비전공자

Github